/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.invoice.controller;

import com.invoice.busines.SubcategoriaBO;
import com.invoice.busines.SubcategoriaBOImpl;

import com.invoice.busines.dto.CategoriaDTO;
import com.invoice.busines.dto.SubcategoriaDTO;
import com.invoice.exceptions.InvoiceException;
import com.invoice.model.entities.Categoria;
import com.invoice.model.entities.Subcategoria;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

/**
 *
 * @author meliMeli
 */
@ManagedBean
@SessionScoped
public class CategoriaBean extends BeanGenerico{

    static final Logger logger = Logger.getLogger(VendedorBean.class.getName());

    private SubcategoriaDTO subcategoriaDTO = new SubcategoriaDTO();
    private final SubcategoriaBO subcategoriaBO = new SubcategoriaBOImpl();
    
    private List<SubcategoriaDTO> subcategoriaListDTO;
    private boolean habEdicion;
    private int idCategoria;
    private String pageRegistro;
    private String pageRegresar;
    @Override
    protected void init() {
        try {
            habEdicion = false;
            subcategoriaListDTO = subcategoriaBO.findAll();
        } catch (Exception ex) {
            Logger.getLogger(CategoriaBean.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public SubcategoriaDTO getSubcategoriaDTO() {
        return subcategoriaDTO;
    }

    public void setSubcategoriaDTO(SubcategoriaDTO subcategoriaDTO) {
        this.subcategoriaDTO = subcategoriaDTO;
    }

    public List<SubcategoriaDTO> getSubcategoriaListDTO() {
        return subcategoriaListDTO;
    }

    public String addSubcategoria() {
        habEdicion = false;
        subcategoriaDTO = new SubcategoriaDTO();
        subcategoriaDTO.setCategoriaDTO(new CategoriaDTO());  
        return pageRegistro;
    }

    public String editSubcategoria() {
        habEdicion = true;
        subcategoriaDTO.setCategoriaDTO(new CategoriaDTO());  
        return pageRegistro;
    }
    /////////////////////////SAVE PRUEBA

    public void registrarSubcategoria(){
        try {
            if (habEdicion) {
                subcategoriaDTO.getCategoriaDTO().setIdCategoria(idCategoria);
                subcategoriaBO.updateSubcategoria(subcategoriaDTO);
            } else {
                subcategoriaDTO.getCategoriaDTO().setIdCategoria(idCategoria);
                subcategoriaBO.addSubcategoriaM(subcategoriaDTO);
            }
            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Registro de Categoría exitoso", "Categoría registrado correctamente");
            dispMessage();
        } catch (InvoiceException ex) {
            logger.log(Level.SEVERE, null, ex);
            msg = new FacesMessage(FacesMessage.SEVERITY_FATAL, "Error en registro", ex.getMessage());

        }
    }
    
    //////////
    public void deleteSubcategoria() {
        try {
            subcategoriaBO.deleteSubcategoria(subcategoriaDTO);
            subcategoriaListDTO = subcategoriaBO.findSubcatProductoAll();
        } catch (Exception ex) {
            logger.log(Level.SEVERE, null, ex);
        }
    }

    /////////////LIST TIPO PRODUCTO//////////
    public List<SubcategoriaDTO> listProducto() {
        idCategoria = 1;
        pageRegistro = "RegistroCategoriaProducto";
        pageRegresar = "CategoriaProductos";
        List<SubcategoriaDTO> list = new ArrayList<SubcategoriaDTO>();
        try {
            list = subcategoriaBO.findSubcatProductoAll();
        } catch (Exception ex) {
            logger.log(Level.SEVERE, null, ex);
        }
        return list;
    }

    ///////////// TIPO UNIDAD//////////
    public List<SubcategoriaDTO> listTipoUnidad() {
        idCategoria = 2;
        pageRegistro = "RegistroCategoriaTipoUnidad";
        pageRegresar = "CategoriaTipo";
        List<SubcategoriaDTO> list = new ArrayList<SubcategoriaDTO>();
        try {
            list = subcategoriaBO.findSubcatTipoUnidadAll();

        } catch (Exception ex) {
            logger.log(Level.SEVERE, null, ex);
        }
        return list;
    }

    /////////////LIST USUARIO//////////
    public List<SubcategoriaDTO> listTipoUsuario() {
        idCategoria = 3;
        pageRegistro = "RegistroCategoriaUsuario";
        pageRegresar = "CategoriaUsuarios";
        List<SubcategoriaDTO> list = new ArrayList<SubcategoriaDTO>();
        try {
            list = subcategoriaBO.findSubcatTipoUsuarioAll();

        } catch (Exception ex) {
            logger.log(Level.SEVERE, null, ex);
        }
        return list;
    }

    /////////////LIST CONFIG IMPRESORAS //////////
    public List<SubcategoriaDTO> listImpresora() {
        idCategoria = 6;
        pageRegistro = "RegistroCategoriaImpresora";
        pageRegresar = "CategoriaCfigImpresora";
        List<SubcategoriaDTO> list = new ArrayList<SubcategoriaDTO>();
        try {
            list = subcategoriaBO.findConfigImpresorasAll();

        } catch (Exception ex) {
            logger.log(Level.SEVERE, null, ex);
        }
        return list;
    }

    /////////////LIST CONFIG DATOS FIJOS //////////

    public List<SubcategoriaDTO> listDatosFijos() {
        idCategoria = 5;
        pageRegistro = "RegistroCategoriaDatoFijo";
        pageRegresar = "CategoriaDatosFijos";
        List<SubcategoriaDTO> list = new ArrayList<SubcategoriaDTO>();
        try {
            list = subcategoriaBO.findConfigDatosFijosAll();

        } catch (Exception ex) {
            logger.log(Level.SEVERE, null, ex);
        }
        return list;
    }
    
    /////////////////////

    public String regresar() {
        return pageRegresar;
    }
}